package io.renren.modules.model.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;

import io.renren.common.utils.PageUtils;
import io.renren.common.utils.Query;
import io.renren.common.utils.R;
import io.renren.modules.model.dao.ModelGroupInfoDao;
import io.renren.modules.model.entity.ModelEquipmentInfoEntity;
import io.renren.modules.model.entity.ModelGroupInfoEntity;
import io.renren.modules.model.entity.ModelVariableInfoEntity;
import io.renren.modules.model.service.ModelEquipmentInfoService;
import io.renren.modules.model.service.ModelGroupInfoService;
import io.renren.modules.model.service.ModelVariableInfoService;


@Service("modelGroupInfoService")
public class ModelGroupInfoServiceImpl extends ServiceImpl<ModelGroupInfoDao, ModelGroupInfoEntity> implements ModelGroupInfoService {
	@Autowired
	private ModelEquipmentInfoService modelEquipmentInfoService;
	@Autowired
	private ModelVariableInfoService modelVariableInfoService;
	
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<ModelGroupInfoEntity> page = this.selectPage(
                new Query<ModelGroupInfoEntity>(params).getPage(),
                new EntityWrapper<ModelGroupInfoEntity>()
        );

        return new PageUtils(page);
    }

	/**
	 * 查询分组下 的 设备 和 变量信息
	 * 
	 * @author lfy.xys
	 * @date 2018年6月25日
	 *
	 * @param params
	 * @return
	 */
    @Override
	public R queryEqmVar(Map<String, String> params) {

		// 1、先查询 设备
		List<ModelEquipmentInfoEntity> eqmEntitys = modelEquipmentInfoService.queryEqmForPid(params);
		
		int n = eqmEntitys.size();
		if(n == 0) {
			// 没有设备数据
			return R.ok().put("child", eqmEntitys);
		}
		
		
		Long[] pids = new Long[n];// 设备的 id集合。
		for (int i = 0; i < n; i++) {
			pids[i] = eqmEntitys.get(i).getId();
		}

		// 2、查询 所有设备的 变量的 集合。
		List<ModelVariableInfoEntity> varEntitys = modelVariableInfoService.queryByIdsMap(pids);

		// 3、根据 变量的 设备id，分配
		// 循环 遍历 数量小的数据。 所以 数量大的 数据 放外面。
		for (ModelVariableInfoEntity varEntity : varEntitys) {
			for (ModelEquipmentInfoEntity eqmEntity : eqmEntitys) {
				// 设备id = 变量pid，匹配上则放置到 子list中
				if (varEntity.getPid() == eqmEntity.getId()) {
					eqmEntity.getList().add(varEntity);
				}
			}
		}

		return R.ok().put("child", eqmEntitys);
	}
    
}
